{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>This notebook is a demonstration of two types of feature engineering methods:<br><br>\n",
    "<ul>\n",
    "    <li>Creating non-linear transformations of individual features</li>\n",
    "    <li>Transforming continuous or discrete features in binary bins - aka \"binning\"</li>\n",
    "</ul><br><br>\n",
    "\n",
    "The first thing we do is write a few functions that make transformations.\n",
    "</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "'''\n",
    "Binning vs transformation\n",
    "'''\n",
    "\n",
    "from sklearn import linear_model\n",
    "import math\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "def genY(x, err, betas):\n",
    "    '''\n",
    "    Goal: generate a Y variable as Y=XB+e \n",
    "    Input\n",
    "    1. an np array x of length n\n",
    "    2. a random noise vector r of length n\n",
    "    3. a (d+1) x 1 vector of coefficients b - each represents ith degree of x\n",
    "    '''\n",
    "    d = pd.DataFrame(x, columns=['x'])    \n",
    "    y = err\n",
    "    for i,b in enumerate(betas):\n",
    "        y = y + b*x**i\n",
    "    d['y'] = y\n",
    "    return d\n",
    "\n",
    "\n",
    "def makePolyFeat(d, deg):\n",
    "    '''\n",
    "    Goal: Generate features up to X**deg\n",
    "    1. a data frame with two features X and Y\n",
    "    4. a degree 'deg' (from which we make polynomial features \n",
    "    \n",
    "    '''\n",
    "    #Generate Polynomial terms\n",
    "    for i in range(2, deg+1):\n",
    "        d['x'+str(i)] = d['x']**i\n",
    "    return d\n",
    "\n",
    "\n",
    "\n",
    "def makeBin(d, bins):\n",
    "    '''\n",
    "    This takes in a dataframe with a feature X and makes evenly spaced bin features\n",
    "    using the pandas get_dummies function\n",
    "    '''\n",
    "    d['g'] = np.floor(bins*(d['x']-d['x'].min())/(d['x'].max()-d['x'].min())).astype(int)\n",
    "    d['g']=-1*(d['g']==bins)+d['g'] #Puts the highest entry into the right bin\n",
    "    #Note that the get_dummies function makes k dummy features if there are k\n",
    "    #discrete values. In modeling you should always use k-1 bins\n",
    "    dummies = pd.get_dummies(d['g'], prefix='bin')\n",
    "    d_m = pd.merge(d, dummies, left_index=True, right_index=True, how='inner')\n",
    "    del d_m['g'] #we don't need this\n",
    "    del d_m['bin_0'] #we don't this either\n",
    "    return d_m\n",
    "    \n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>Now that we've created the functions, let's generate some data. Again, the goal is to generate an X-Y relationship with noise, but where we know the underlying data generating distribution.\n",
    "</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "betas = [0, 4, -3.5, 1]\n",
    "n=200\n",
    "sig=2.2\n",
    "sp=20\n",
    "\n",
    "x_init = np.random.uniform(0,1,n)\n",
    "e_init = np.random.normal(0, sig, n)\n",
    "\n",
    "dat = genY(x_init, e_init, betas)\n",
    "dat = makePolyFeat(dat, 6)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>Now we want to see the effect of fitting polynomial curves of different degrees to our noisy data set. Ultimately, we want to illustrate how model specification (and feature engineering) affects the bias-variance tradeoff.\n",
    "\n",
    "\n",
    "</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def PlotLinDeg(X_train, y_train, X_test, y_test, i, t):\n",
    "    '''\n",
    "    This function builds a regression model on the simulated data\n",
    "    1. plots the test data\n",
    "    2. plots the fitted line\n",
    "    3. Shows sum-square error\n",
    "    '''\n",
    "    regr = linear_model.LinearRegression(fit_intercept=True)\n",
    "    regr.fit(X_train, y_train)\n",
    "    y_hat=regr.predict(X_train)\n",
    "    y_hat_test=regr.predict(X_test)\n",
    "    ss_train=((y_train-y_hat)**2).mean()\n",
    "    ss_test=((y_test-y_hat_test)**2).mean()\n",
    "    #Plot train X vs. Predicted Y_train\n",
    "    plt.subplot(2, 3, i)\n",
    "    plt.plot(X_train['x'], y_train, 'b.')\n",
    "    plt.plot(X_train['x'], y_hat, 'r.')\n",
    "    plt.title('{}\\n Train MSE={}'.format(t,round(ss_train,4)))\n",
    "    #Plot test X vs. Predicted Y_test\n",
    "    plt.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')\n",
    "    plt.subplot(2,3,i+3)\n",
    "    plt.plot(X_test['x'], y_test, 'b.')\n",
    "    plt.plot(X_test['x'], y_hat_test, 'r.')\n",
    "    plt.title('Test MSE={}'.format(round(ss_test,4)))\n",
    "    plt.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')\n",
    "    \n",
    "    \n",
    "def PlotLinBin(X_train, y_train, X_test, y_test, i, t, x, x_t):\n",
    "    '''\n",
    "    This function builds a regression model on the simulated data\n",
    "    1. plots the test data\n",
    "    2. plots the fitted line\n",
    "    3. Shows sum-square error\n",
    "    '''\n",
    "    regr = linear_model.LinearRegression(fit_intercept=True)\n",
    "    regr.fit(X_train, y_train)\n",
    "    y_hat=regr.predict(X_train)\n",
    "    y_hat_test=regr.predict(X_test)\n",
    "    ss_train=((y_train-y_hat)**2).mean()\n",
    "    ss_test=((y_test-y_hat_test)**2).mean()\n",
    "    #Plot train X vs. Predicted Y_train\n",
    "    plt.subplot(2, 3, i)\n",
    "    plt.plot(x, y_train, 'b.')\n",
    "    plt.plot(x, y_hat, 'r.')\n",
    "    plt.title('{}\\n Train MSE={}'.format(t,round(ss_train,4)))\n",
    "    #Plot test X vs. Predicted Y_test\n",
    "    plt.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')\n",
    "    plt.subplot(2,3,i+3)\n",
    "    plt.plot(x_t, y_test, 'b.')\n",
    "    plt.plot(x_t, y_hat_test, 'r.')\n",
    "    plt.title('Test MSE={}'.format(round(ss_test,4)))\n",
    "    plt.tick_params(axis='x', which='both', bottom='off', top='off', labelbottom='off')\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/briand/anaconda/envs/py35/lib/python3.5/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n",
      "  warnings.warn(message, mplDeprecation, stacklevel=1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nhmEYRqL5/zuXQGd9f8ZKAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 600x400 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sp = 20\n",
    "\n",
    "f1=['x']; f3=['x', 'x2', 'x3']; f6=['x', 'x2', 'x3', 'x4', 'x5', 'x6']\n",
    "\n",
    "fig=plt.figure()\n",
    "\n",
    "PlotLinDeg(dat[f1][:sp], dat['y'][:sp], dat[f1][sp:], dat['y'][sp:], 1, 'Degree 1')\n",
    "PlotLinDeg(dat[f3][:sp], dat['y'][:sp], dat[f3][sp:], dat['y'][sp:], 2, 'Degree 3')\n",
    "PlotLinDeg(dat[f6][:sp], dat['y'][:sp], dat[f6][sp:], dat['y'][sp:], 3, 'Degree 6')\n",
    "\n",
    "fig.tight_layout()\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<p>The above plot is a great illustration of bias-variance tradeoffs. The top row shows an nth-degree model fit to a sparse training set. The bottom row shows this fitted model against the test data (with actuals in blue and predicted in red). We can see multiple things here:<br>\n",
    "<ul>\n",
    "    <li>MSE gets much better on training data as we increase the degree to 6</li>\n",
    "    <li>MSE gets notably worse on test data as we increase the degree from 3 to 6</li>\n",
    "    <li>A linear model is notably biased (has the worst training error), but the error from bias is better than the error induced from overfitting (i.e., the high variance model)</li>\n",
    "</ul><br>\n",
    "\n",
    "Now let's do a similar experiment with the bin features.\n",
    "</p>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/briand/anaconda/envs/py35/lib/python3.5/site-packages/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Passing one of 'on', 'true', 'off', 'false' as a boolean is deprecated; use an actual boolean (True/False) instead.\n",
      "  warnings.warn(message, mplDeprecation, stacklevel=1)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x400 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def getBinName(vl, pre):\n",
    "    l=[]\n",
    "    for v in vl:\n",
    "        if (pre in v):\n",
    "            l.append(v)\n",
    "    return l\n",
    "\n",
    "\n",
    "d4 = makeBin(dat,2); g4 = getBinName(d4.columns.values,'bin')\n",
    "PlotLinBin(d4[g4][:sp], d4['y'][:sp], d4[g4][sp:], d4['y'][sp:], 1, 'Bins=10', d4['x'][:sp], d4['x'][sp:])\n",
    "\n",
    "d10=makeBin(dat, 10); g10 = getBinName(d10.columns.values, 'bin')\n",
    "PlotLinBin(d10[g10][:sp], d10['y'][:sp],d10[g10][sp:], d10['y'][sp:], 2, 'Bins=30', d10['x'][:sp], d10['x'][sp:])\n",
    "\n",
    "d50=makeBin(dat, 20); g50=getBinName(d50.columns.values, 'bin')\n",
    "PlotLinBin(d50[g50][:sp], d50['y'][:sp],d50[g50][sp:], d50['y'][sp:], 3, 'Bins=50', d50['x'][:sp], d50['x'][sp:])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
